import { defineConfig } from "vite";

// 依赖分析
import { visualizer } from "rollup-plugin-visualizer";

// 按需导入图标
// import Icons from 'unplugin-icons/vite';

// 压缩插件
import viteCompression from "vite-plugin-compression";

// 图片压缩插件
import { ViteImageOptimizer } from "vite-plugin-image-optimizer";

// cdn
// import cdnImport from "vite-plugin-cdn-import";

// const cdnModules = [
//   {
//     name: "vue",
//     var: "Vue",
//     path: "https://cdn.jsdelivr.net/npm/vue@3.5.13/dist/vue.global.min.js",
//   },
//   {
//     name: "vue-router",
//     var: "VueRouter",
//     path: "https://cdn.jsdelivr.net/npm/vue-router@4.5.0/dist/vue-router.global.min.js",
//   },
// ];

export default defineConfig({
  plugins: [
    // 文件压缩 Brotli 压缩比 Gzip 更高效，可以进一步减少文件体积 algorithm: "brotliCompress", ext: ".br"
    viteCompression({
      verbose: true, // 是否在控制台输出压缩信息
      disable: false, // 是否禁用压缩
      algorithm: "gzip", // 使用 Brotli 压缩
      ext: ".gz", // 文件扩展名
      threshold: 3072, // 仅压缩大于 3KB 的文件
      deleteOriginFile: false, // 是否删除原始文件
    }),
    // 图片压缩
    ViteImageOptimizer(),
    //cdn 引入
    // cdnImport({ modules: cdnModules }),
    // 依赖包分析
    visualizer({
      open: true,
      filename: "bundle-analysis.html", //文件名
    }),
  ],
  build: {
    // outDir: "dist",
    rollupOptions: {
      output: {
        // 默认就是这样的
        // entryFileNames: 'assets/[name]-[hash].js',// 入口文件哈希命名
        // chunkFileNames: 'assets/[name]-[hash].js',// 代码分割文件哈希命名
        // assetFileNames: 'assets/[name]-[hash].[ext]',// 静态资源哈希命名
        manualChunks: {
          // 自定义代码分割
          'vendor-vue': ['vue'], //通过cdn引入
          'vendor-vue-router': ['vue-router'], //通过cdn引入
          "vendor-pinia": ["pinia"],
          "vendor-axios": ["axios"],
          "vendor-mitt": ["mitt"],
          "vendor-element-plus": ["element-plus"],
        },
      },
      // external: ["vue", "vue-router"], // 排除依赖 通过cdn引入
    },
  },
});
